/**
 * 测试脚本 - 在安装插件后使用此脚本测试插件功能
 * 执行: node test.js
 */

const http = require('http');
const url = require('url');
const fs = require('fs');
const path = require('path');

// 读取 project.json 文件
function readProjectData() {
  try {
    const dataPath = path.join(__dirname, 'public', 'project.json');
    if (fs.existsSync(dataPath)) {
      const data = fs.readFileSync(dataPath, 'utf8');
      return JSON.parse(data);
    }
  } catch (error) {
    console.error('读取数据失败:', error);
  }
  return { projects: [] };
}

// 检查插件是否加载成功
function checkPluginLoaded() {
  return new Promise((resolve) => {
    // 创建请求选项，使用 whistle 作为代理
    const options = {
      hostname: 'example.com',
      port: 80,
      path: '/test',
      method: 'HEAD',
      headers: {
        'User-Agent': 'NoHost-Plugin-Test/1.0'
      },
      // 使用 whistle 代理
      agent: new http.Agent({
        host: '127.0.0.1',
        port: 8899
      })
    };
    
    const req = http.request(options, (res) => {
      // 检查是否有我们在 rules.txt 中添加的头部
      const hasPluginHeader = !!res.headers['x-whistle-nohost-plugin'];
      
      if (hasPluginHeader) {
        console.log('✅ 插件已成功加载: x-whistle-nohost-plugin = ' + res.headers['x-whistle-nohost-plugin']);
        resolve(true);
      } else {
        console.log('❌ 插件未正确加载，没有检测到 x-whistle-nohost-plugin 头部');
        resolve(false);
      }
    });
    
    req.on('error', (e) => {
      console.error('请求失败:', e.message);
      resolve(false);
    });
    
    req.end();
  });
}

// 测试激活环境并查看是否生效
async function testActivateEnvironment() {
  try {
    // 读取项目数据
    const data = readProjectData();
    if (!data.projects || data.projects.length === 0) {
      console.log('⚠️ 没有找到任何项目，请先添加项目和环境');
      return;
    }
    
    // 显示项目和环境
    console.log('\n项目和环境列表:');
    data.projects.forEach((project, i) => {
      console.log(`${i + 1}. 项目: ${project.name} (${project.id})`);
      project.environments.forEach((env, j) => {
        const status = env.isActive ? '✅ 激活' : '❌ 未激活';
        console.log(`   ${j + 1}. 环境: ${env.name} (${env.type}) - ${status}`);
        if (env.hosts && env.hosts.length > 0) {
          env.hosts.forEach(host => {
            console.log(`      - Host: ${host}`);
          });
        }
      });
    });
    
    console.log('\n请访问 Whistle 管理页面激活/取消激活环境，然后观察规则是否生效');
    console.log('Whistle 管理页面: http://local.whistlejs.com/');
    console.log('NoHost 插件页面: http://local.whistlejs.com/plugin.nohost/');
    
  } catch (error) {
    console.error('测试失败:', error);
  }
}

// 主测试函数
async function runTests() {
  console.log('===== NoHost 插件测试 =====');
  
  console.log('\n测试 1: 检查插件是否加载成功');
  const pluginLoaded = await checkPluginLoaded();
  
  console.log('\n测试 2: 查看可用的项目和环境');
  await testActivateEnvironment();
  
  console.log('\n===== 测试完成 =====');
  
  if (pluginLoaded) {
    console.log('\n✅ 插件已成功加载，请通过 Whistle 管理页面激活环境并测试是否生效');
    console.log('Whistle 管理页面: http://local.whistlejs.com/');
    console.log('NoHost 插件页面: http://local.whistlejs.com/plugin.nohost/');
  } else {
    console.log('\n❌ 插件未正确加载，请检查安装和配置');
    console.log('提示: 检查 whistle 是否正在运行，以及插件是否正确安装');
  }
}

// 运行测试
runTests();
